<?php
	$page = $_GET['page'];
	
	switch($page){
		default:
			home();
			break;
		case "request_account":
			request_account();
			break;
		case "forgot_password":
			forgot_password();
			break;
		case "logout":
			logout();
			break;
		case "my_account":
			validating_authentication();
			my_account();
			break;
		case "reservation":
			validating_authentication();
			include ("system/scheduler.php");
			break;
		case "my_reservations":
			validating_authentication();
			include ("system/getUserReservations.php");
			break;
		case "manager_user":
			validating_authentication('admin');
			manager_user();
			break;
		case "edit_user":
			validating_authentication('admin');
			edit_user();
			break;
		case "pendency":
			validating_authentication('admin');
			pendency();
	}
		
	function home(){
		echo "<div id='text'>
				<a class='title'>OMF UFG Testbed</a>
				<a>Welcome to the LABORA of the Institute of Informatics (INF) at Federal University of Goiás (UFG).</a>
				
				<a>This page gives access to a remote experimental infrastructure (or testbed) for tests with computer networks and distributed systems, mainly involving wireless devices. This testbed is part of the project FIBRE, an initiative between Brazil and Europe.</a>
				
				<a>LABORA is a research group focuses on communication networks and distributed applications. Among the topics researched by the group are Future Internet and experimental infrastructures. In this context, LABORA presents the first deployment of NITOS Scheduler combined with OMF in Brazil.</a>
			
				<a>NITOS (Network Implementation Testbed using Open Source code) Scheduler is a system for resource reservation that allow to slice a wireless testbed. A user can choose devices (or nodes) and frequencies (or channel) in order to make experiments. NITOS Scheduler has been developed by NITlab of the Computer and Communication Engineering Department at University of Thessaly, in Greece.</a>
				
				<a>OMF (cOntrol and Management Framework) is a set of tools to control and management testbeds. OMF allows to remotely setup experiments and collect results from different types of devices, such as computers, routes, switches, wireless AP, etc. OMF has been initially by WINLAB at Rutgers University, in USA. Nowadays, OMF is open-source initiative, receiving support from WINLAB, NITlab, NICTA, and other institutions and individuals.</a>
			</div>
		";
	}
	
	function my_account(){
		$ldap_connection = ldap_connect(HOST_LDAP,PORT_LDAP) or die("Error connecting to the LDAP server");
				
		ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
		ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0);
		
		if(isset($_POST['sbmt'])){
			$username = $_POST['username'];
			$name = $_POST['name'];
			$email = $_POST['email'];
			$current_password = $_POST['current_password'];
			$password = $_POST['password'];
			$password2 = $_POST['password2'];
			
			if(empty($username) || empty($name) || empty($email))
				set_message('Fill out all fields to continue.','alert',1);
			else{
				$ldap_bind = ldap_bind($ldap_connection, USER_LDAP, PASS_LDAP);

				$change = array(
							"sn" => array($name),
							"mail" => array($email)
						  );
						  
				// Change password:
				if(!empty($password) && !empty($password2) && ($password != $password2)){
					set_message('Passwords do not match.','alert',1);
					$password_error = TRUE;
				}else if(!empty($current_password) && !empty($password) && !empty($password2)){
					// search my current password
					$search_for = 'uid='.$username.'';		
					$search = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", $search_for);
					$ldapResults = ldap_get_entries($ldap_connection, $search);
					
					$current_password = '{CRYPT}'.md5crypt($current_password, substr($ldapResults[0]['userpassword'][0],7,12)).'';
					$password_verify = ldap_compare($ldap_connection, "uid=".$username.",".LDAP_PEOPLE.",".LDAP_TREE."", 'userpassword', $current_password);
					
					if($password_verify == 1){
						$password = '{CRYPT}'.md5crypt($password).'';
						$change['userpassword'] = array($password);
					}else{
						set_message('Wrong current password.','error',1);
						$password_error = TRUE;
					}
				}

				if(!isset($password_error)){
					$modify = ldap_modify($ldap_connection, "uid=".$username.",".LDAP_PEOPLE.",".LDAP_TREE."", $change);
					
					if($modify)
						set_message('User edited successfully!','success',1);
					else
						set_message('Error to edit this user, try again.','error',1);
				}
			}
		}
		
		// Recover my account data
		$search_for = 'uid='.$_SESSION[''.SECURITY_SESSION.'']['username'].'';
		$search = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", $search_for);  
		
		$ldapResults = ldap_get_entries($ldap_connection, $search);
		if($ldapResults['count'] < 1)
			Header("Location: index.php?page=logout");
		
		// Define form default values
		$username = ($ldapResults[0]['uid'][0] != $_POST['username'] && isset($_POST['username'])) ? $_POST['username'] : $ldapResults[0]['uid'][0];
		$name = ($ldapResults[0]['sn'][0] != $_POST['name'] && isset($_POST['name'])) ? $_POST['name'] : $ldapResults[0]['sn'][0];
		$email = ($ldapResults[0]['mail'][0] != $_POST['email'] && isset($_POST['email'])) ? $_POST['email'] : $ldapResults[0]['mail'][0];
		
		echo "<div id='text'>
				<a class='title'>My Account: ".$_SESSION[''.SECURITY_SESSION.'']['username']."</a>
			  </div>";
		
		echo "<form method='POST' action='' id='registration'>
				<table>
					<tr>
						<td>Login Name</td>
						<td><input type='text' name='username' value='".$username."' readonly/></td>
					</tr>
					
					<tr>
						<td>Full Name</td>
						<td><input type='text' name='name' value='".$name."'/></td>
					</tr>
					
					<tr>
						<td>E-mail</td>
						<td><input type='text' name='email' value='".$email."'/></td>
					</tr>
					
					<tr>
						<td>Current password</td>
						<td><input type='password' name='current_password'/></td>
					</tr>
					
					<tr>
						<td>New password</td>
						<td><input type='password' name='password'/></td>
					</tr>
					
					<tr>
						<td>Re-type password</td>
						<td><input type='password' name='password2'/></td>
					</tr>

					<tr>
						<td></td>
						<td><input type='submit' value='Apply changes' name='sbmt'/></td>
					</tr>
				</table>
			</form>";
	}
	
	function request_account(){		
		if(isset($_POST['sbmt'])){
			$username = $_POST['username'];
			$password = $_POST['password'];
			$password2 = $_POST['password2'];
			$name = $_POST['name'];
			$email = $_POST['email'];
			
			if(empty($username) || empty($password) || empty($password2) || empty($name))
				set_message('Fill out all fields to continue.','alert',1);
			else if($password != $password2)
				set_message('Passwords do not match.','alert',1);
			else{
				$ldap_connection = ldap_connect(HOST_LDAP,PORT_LDAP) or die("Error connecting to the LDAP server");
				
				ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
				ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0);
				
				if ($ldap_connection) {
					$search_for = 'uid='.$username.'@'.ISLAND_PREFIX.'';

					$ldap_bind = ldap_bind($ldap_connection, USER_LDAP, PASS_LDAP);
					
					$search = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", $search_for);  

					if(ldap_count_entries($ldap_connection, $search)){
						set_message('There is already a registered user with this Login Name.','error',1);
					}else{
						$search_max_uid = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", "uid=*");  
						$ldapResults = ldap_get_entries($ldap_connection, $search_max_uid);
						
						$max_uidn = 0;
						for ($item = 0; $item < $ldapResults['count']; $item++) {
							if($ldapResults[$item]['uidnumber'][0] > $max_uidn) $max_uidn = $ldapResults[$item]['uidnumber'][0];
						} 
						
						if($max_uidn < 1500) $max_uidn = 1501; else $max_uidn++;
						
						$password = '{CRYPT}'.md5crypt($password).'';
						
						// Search group id:
						$search_group = ldap_search($ldap_connection, "".LDAP_GROUP.",".LDAP_TREE."", "cn=".ISLAND_PREFIX."");  
						$group_results = ldap_get_entries($ldap_connection, $search_group);
						
						$group_id = $group_results[0]['gidnumber'][0];
						
						// Creating user
						$data = array('cn' => $username,
									  'gidnumber' => $group_id,
									  'homedirectory' => '/home/'.ISLAND_PREFIX.'/'.$username.'',
									  'objectClass' => array('top','person','inetOrgPerson','posixAccount','eduPerson','brPerson','schacPersonalCharacteristics','fibre'),
									  'sn' => $name,
									  'uidnumber' => $max_uidn,
									  'uid' => ''.$username.'@'.ISLAND_PREFIX.'',
									  'eduPersonPrincipalName' => ''.$username.'@'.ISLAND_PREFIX.'',
									  'mail' => $email,
									  'userpassword' => ''.$password.'',
									  'loginShell' => '/bin/bash',
									  'userEnable' => 'FALSE',
									  'omfAdmin' => 'FALSE');
									  
						$add_user = ldap_add($ldap_connection, "uid=".$data["uid"].",".LDAP_PEOPLE.",".LDAP_TREE."", $data);
						
						if($add_user){
							// Send email to administrators
							$search_admin = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", "omfadmin=TRUE"); 
							$admin_results = ldap_get_entries($ldap_connection, $search_admin);
							
							$subject = 'Testbed user registration';
							$message = 'You have a new user to be evaluated in the testbed:<br><br>';
							$message .= '<b>Name:</b> '.$name.'<br>';
							$message .= '<b>E-mail:</b> '.$email.'<br>';
							$message .= '<b>Institution:</b> '.ISLAND_PREFIX.'';
							
							$sender = array('email' => $email, 'name' => $name);
							
							$receiver = array();
							for ($i = 0; $i < $admin_results['count']; $i++) {
								$receiver[] = array('email' => $admin_results[$i]['mail'][0],
													'name' => $admin_results[$i]['sn'][0]);
							}

							if(count($receiver) > 0)
								send_mail($sender, $receiver, $subject, $message);
						}else
							set_message('Error in the Registration Request, try again.','error',1);
					}
				}
			}
		}
		
		echo "<div id='text'>
				<a class='title'>Request Account</a>
			  </div>";
		
		if($add_user){
			set_message('Request Registration was successful, wait for the approval of registration by administrators.','success',1);
		}else{
			echo "<form method='POST' action='' id='registration'>
					<table>
						<tr>
							<td>Login Name</td>
							<td><input type='text' name='username' value='".$username."'/></td>
						</tr>
						
						<tr>
							<td>Full Name</td>
							<td><input type='text' name='name' value='".$name."'/></td>
						</tr>
						
						<tr>
							<td>E-mail</td>
							<td><input type='text' name='email' value='".$email."'/></td>
						</tr>
						
						<tr>
							<td>Password</td>
							<td><input type='password' name='password'/></td>
						</tr>
						<tr>
							<td>Re-type Password</td>
							<td><input type='password' name='password2'/></td>
						</tr>
						<tr>
							<td></td>
							<td><input type='submit' value='Request Account' name='sbmt'/></td>
						</tr>
					</table>
				</form>";
		}
	}
	
	function manager_user(){
		$ldap_connection = ldap_connect(HOST_LDAP,PORT_LDAP) or die("Error connecting to the LDAP server");
		
		ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
		ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0);
		
		// Remove entryes
		if(isset($_POST['remove'])){
			$ldap_bind = ldap_bind($ldap_connection, USER_LDAP, PASS_LDAP);
			$user_to_remove = "uid=".$_POST['remove_uid'].",".LDAP_PEOPLE.",".LDAP_TREE."";
			
			if (ldap_delete($ldap_connection, $user_to_remove))
				set_message('User removed successfully!','success',1);
			else
				set_message('Error to remove this user, try again.','error',1);
		}
		
		// Search users
		if ($ldap_connection) {
			$search_for = "uid=*";
			
			$ldap_bind = ldap_bind($ldap_connection, USER_LDAP, PASS_LDAP);
			
			$search = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", $search_for); 
			$ldapResults = ldap_get_entries($ldap_connection, $search);
		}
		
		echo "<div id='text'>
				<a class='title'>Manager users</a>
			</div>";
			
		echo "<table id='reserve' class='table_max'>
				<tr class='top'>
					<td>Username</td>
					<td>Name</td>
					<td>Email</td>
					<td width='120px'>Actions</td>
				</tr>";
		
		for ($item = 0; $item < $ldapResults['count']; $item++) {
			echo "<tr>
				<td>".$ldapResults[$item]['uid'][0]."</td>
				<td>".$ldapResults[$item]['sn'][0]."</td>
				<td>".$ldapResults[$item]['mail'][0]."</td>
				<td>
					<form action='' method='GET' style='display: inline;'>
						<input type='submit' value='Edit'>
						<input type='hidden' name='page' value='edit_user'>
						<input type='hidden' name='user_id' value='".$ldapResults[$item]['uidnumber'][0]."'>
					</form>
					<form action='' method='POST' style='display: inline;'>
						<input type='submit' name='remove' value='Remove'>
						<input type='hidden' name='remove_uid' value='".$ldapResults[$item]['uid'][0]."'>
					</form>
				</td>
			</tr>";
			;            
		}
		echo "</table>";
	}
	
	function edit_user(){
		$ldap_connection = ldap_connect(HOST_LDAP,PORT_LDAP) or die("Error connecting to the LDAP server");
				
		ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
		ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0);
		
		if(isset($_POST['sbmt'])){
			$username = $_POST['username'];
			$name = $_POST['name'];
			$email = $_POST['email'];
			$password = $_POST['password'];
			$userenable = $_POST['omfenable'];
			$omfadmin = $_POST['omfadmin'];
			
			if(empty($username) || empty($name) || empty($email))
				set_message('Fill out all fields to continue.','alert',1);
			else{
				$ldap_bind = ldap_bind($ldap_connection, USER_LDAP, PASS_LDAP);
				
				$change = array(
							"sn" => array($name),
							"mail" => array($email),
							"userenable" => array($userenable),
							"omfadmin" => array($omfadmin)
						  );
						  
				// Change password:
				if(!empty($password)){
					$password = '{CRYPT}'.md5crypt($password).'';
					$change['userpassword'] = array($password);
				}

				$modify = ldap_modify($ldap_connection, "uid=".$username.",".LDAP_PEOPLE.",".LDAP_TREE."", $change);
				
				if($modify)
					set_message('User edited successfully!','success',1);
				else
					set_message('Error to edit this user, try again.','error',1);
			}
		}
						
		if ($ldap_connection && isset($_GET['user_id']) && is_numeric($_GET['user_id'])) {
			$search_for = 'uidnumber='.$_GET['user_id'].'';
			$ldap_bind = ldap_bind($ldap_connection, USER_LDAP, PASS_LDAP);
					
			$search = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", $search_for);  
		
			$ldapResults = ldap_get_entries($ldap_connection, $search);
			
			if($ldapResults['count'] < 1)
				Header("Location: index.php");
		}else
			Header("Location: index.php");
			
		$username = ($ldapResults[0]['uid'][0] != $_POST['username'] && isset($_POST['username'])) ? $_POST['username'] : $ldapResults[0]['uid'][0];
		$name = ($ldapResults[0]['sn'][0] != $_POST['name'] && isset($_POST['name'])) ? $_POST['name'] : $ldapResults[0]['sn'][0];
		$email = ($ldapResults[0]['mail'][0] != $_POST['email'] && isset($_POST['email'])) ? $_POST['email'] : $ldapResults[0]['mail'][0];
		
		echo "<div id='text'>
				<a class='title'>Edit Account - ".$username."</a>
			  </div>";
		
		echo "<form method='POST' action='' id='registration'>
				<table>
					<tr>
						<td>Login Name</td>
						<td><input type='text' name='username' value='".$username."' readonly/></td>
					</tr>
					
					<tr>
						<td>Full Name</td>
						<td><input type='text' name='name' value='".$name."'/></td>
					</tr>
					
					<tr>
						<td>E-mail</td>
						<td><input type='text' name='email' value='".$email."'/></td>
					</tr>
					
					<tr>
						<td>Password</td>
						<td><input type='password' name='password'/></td>
					</tr>
					
					<tr>
						<td>OMF Enable</td>
						<td>
							<select name='omfenable'>";
								if($ldapResults[0]['userenable'][0] == 'TRUE'){
									echo "<option value='TRUE'>Yes</option>
									<option value='FALSE'>No</option>";
								}else{
									echo "<option value='FALSE'>No</option>
									<option value='TRUE'>Yes</option>";
								}
					echo "  </select>
						</td>
					</tr>
					<tr>
						<td>Permission</td>
						<td>
							<select name='omfadmin'>";
								if($ldapResults[0]['omfadmin'][0] == 'TRUE'){
									echo "<option value='TRUE'>Administrator</option>
									<option value='FALSE'>User</option>";
								}else{
									echo "<option value='FALSE'>User</option>
									<option value='TRUE'>Administrator</option>";
								}
					echo "  </select>
						</td>
					</tr>
					<tr>
						<td></td>
						<td><input type='submit' value='Apply changes' name='sbmt'/></td>
					</tr>
				</table>
			</form>";
	}
	
	function pendency(){
		$ldap_connection = ldap_connect(HOST_LDAP,PORT_LDAP) or die("Error connecting to the LDAP server");
		
		ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
		ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0);
		
		// Remove entryes
		if(isset($_POST['action'])){
			$username = $_POST['user_uid'];
			$ldap_bind = ldap_bind($ldap_connection, USER_LDAP, PASS_LDAP);
			
			if($_POST['action'] == 'Accept'){
				$change = array("userenable" => array('TRUE'));

				$search_user = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", "uid=".$username.""); 
				$user_results = ldap_get_entries($ldap_connection, $search_user);
					
				$modify = ldap_modify($ldap_connection, "uid=".$username.",".LDAP_PEOPLE.",".LDAP_TREE."", $change);

				if($modify){
					$subject = 'Testbed user registration';
					$message = 'Your account request has been <b>approved</b>!';
						
					set_message('User approved successfully!','success',1);
				}else
					set_message('Error to approve this user, try again.','error',1);
			}else if($_POST['action'] == 'Refuse'){
				$user_to_remove = "uid=".$username.",".LDAP_PEOPLE.",".LDAP_TREE."";
				
				$search_user = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", "uid=".$username.""); 
				$user_results = ldap_get_entries($ldap_connection, $search_user);
	
				$remove = ldap_delete($ldap_connection, $user_to_remove);
				
				if ($remove){
					$subject = 'Testbed user registration';
					$message = 'Your account request has been <b>reproved</b></b><br>contact your testbed administrator';
					
					set_message('User refused successfully!','success',1);
				}else
					set_message('Error to refuse this user, try again.','error',1);
			}
			
			// Send e-mail to the user informing the approval of registration
			if($remove || $modify){	
				$search_admin = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", "uid=".$_SESSION[''.SECURITY_SESSION.'']['username'].""); 
				$admin_results = ldap_get_entries($ldap_connection, $search_admin);
				
				$receiver[0] = array('email' => $user_results[0]['mail'][0],
								'name' => $user_results[0]['sn'][0]);
							
				$sender = array('email' => $admin_results[0]['mail'][0],
								  'name' => $admin_results[0]['sn'][0]);
								  
				send_mail($sender, $receiver, $subject, $message);
			}
		}
		
		// Search users
		if ($ldap_connection) {
			$search_for = "userenable=FALSE";
			
			$ldap_bind = ldap_bind($ldap_connection, USER_LDAP, PASS_LDAP);
			
			$search = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", $search_for); 
			$ldapResults = ldap_get_entries($ldap_connection, $search);
		}
		
		echo "<div id='text'>
				<a class='title'>Users pending to approve</a>
			</div>";
			
		echo "<table id='reserve' class='table_max'>
				<tr class='top'>
					<td>Username</td>
					<td>Name</td>
					<td>Email</td>
					<td width='125px'>Actions</td>
				</tr>";
				
		if($ldapResults['count'] <= 0){
			echo "<tr>
				<td colspan='4'>You have no users to evaluate.</td>
			</tr>";
		}
		
		for ($item = 0; $item < $ldapResults['count']; $item++) {
			echo "<tr>
				<td>".$ldapResults[$item]['uid'][0]."</td>
				<td>".$ldapResults[$item]['sn'][0]."</td>
				<td>".$ldapResults[$item]['mail'][0]."</td>
				<td>
					<form action='' method='POST' style='display: inline;'>
						<input type='submit' name='action' value='Accept'>
						<input type='hidden' name='user_uid' value='".$ldapResults[$item]['uid'][0]."'>
					</form>
					<form action='' method='POST' style='display: inline;'>
						<input type='submit' name='action' value='Refuse'>
						<input type='hidden' name='user_uid' value='".$ldapResults[$item]['uid'][0]."'>
					</form>
				</td>
			</tr>";           
		}
		echo "</table>";
	}
	
	function forgot_password(){
		if(isset($_POST['sbmt'])){
			$username = $_POST['username'];

			if(!strstr($username,"@".ISLAND_PREFIX.""))
				$username = "".$username."@".ISLAND_PREFIX."";

			$ldap_connection = ldap_connect(HOST_LDAP,PORT_LDAP) or die("Error connecting to the LDAP server");
			
			ldap_set_option($ldap_connection, LDAP_OPT_PROTOCOL_VERSION, 3);
			ldap_set_option($ldap_connection, LDAP_OPT_REFERRALS, 0);
			
			$search_for = "uid=".$username."";	
			$search = ldap_search($ldap_connection, "".LDAP_PEOPLE.",".LDAP_TREE."", $search_for); 
				
			if(ldap_count_entries($ldap_connection, $search)){
				$ldapResults = ldap_get_entries($ldap_connection, $search);

				$ldap_bind = ldap_bind($ldap_connection, USER_LDAP, PASS_LDAP);
				
				// Generate a new password and change it
				$new_password = substr(md5(uniqid(time(), true)), 0, 12);
				$crypted_password = '{CRYPT}'.md5crypt($new_password).'';
				$change['userpassword'] = array($crypted_password);

				$modify = ldap_modify($ldap_connection, "uid=".$username.",".LDAP_PEOPLE.",".LDAP_TREE."", $change);
				
				if($modify){
					// Send e-mail to the user
					$subject = 'Testbed password recovery';
					$message = 'You requested a password recovery in testbed.<br>'.
							   'New password: <b>'.$new_password.'</b>';
					
					$receiver[0] = array('email' => $ldapResults[0]['mail'][0],
										 'name' => $ldapResults[0]['sn'][0]);
									
					$sender = array('email' => $ldapResults[0]['mail'][0],
									'name' => $ldapResults[0]['sn'][0]);
										  
					send_mail($sender, $receiver, $subject, $message);
					set_message('Password changed successfully, please check your email to learn your new password','success',1);
				}else
					set_message('An error occurred, please try again','error',1);
			}else
				set_message('User not found.','error',1);	
		}
		
		echo "<div id='text'>
				<a class='title'>Recover a forgotten password</a>
			  </div>";
		
		echo "<form method='POST' action='' id='registration'>
				<table>
					<tr>
						<td>Login Name</td>
						<td><input type='text' name='username'/></td>
					</tr>
					<tr>
						<td></td>
						<td><input type='submit' value='Recover' name='sbmt'/></td>
					</tr>
				</table>
			</form>";
	}
	
	function logout(){
		session_unset();
		header("Location: index.php");
	}
?>
